# -*- coding: utf-8 -*-

from django.db import models
from django.db.models.signals import post_save

from datetime import date

Aberto = '1'
Respondido = '2'
Fechado = '3'

OPCOES_STATUS = (
    (Aberto, 'Aberto'),
    (Respondido, 'Respondido'),
    (Fechado, 'Fechado')
)

class TipoChamado(models.Model):
    
    class Meta:
        verbose_name = u"Tipo de Chamado"
        verbose_name_plural = u"Tipos de Chamado"
    
    nome = models.CharField(max_length = 50,
                               verbose_name = u"Tipo Chamado",
                               help_text = u"Nome que identifica este chamado.")
    def __unicode__(self):
        return self.nome

def tipoDefault():
        return TipoChamado.objects.get(id=1)

class Chamado(models.Model):
     
    class Meta:
        verbose_name = u"Chamado"
        verbose_name_plural = u"Chamados"
        ordering = ['-abertura']
    
    
    
    cliente = models.CharField(max_length = 50,
                               verbose_name = u"Cliente",
                               help_text = u"Cliente que abriu o Chamado - Campo obrigatório.")
    
    grupo = models.CharField(max_length = 10,
                            verbose_name = u"Grupo",
                            help_text = u"Grupo que abriu o Chamado - Campo obrigatório.")

    tipo = models.ForeignKey(TipoChamado,
                             verbose_name = u"Tipo",
                             help_text = u"Tipo deste Chamado - Campo obrigatório.",
                             default = tipoDefault)
    
    status = models.CharField(max_length = 1,
                              choices = OPCOES_STATUS,
                              verbose_name = u"Status",
                              help_text = u"Status atual do Chamado - Campo obrigatório.",
                              default = Aberto)
    
    abertura = models.DateField(verbose_name = u"Data Abertura",
                                help_text = u"Data de Abertura deste Chamado - Campo obrigatório.",
                                default = date.today())
    
    atualizacao = models.DateField(verbose_name = u"Data Atualização",
                                   help_text = u"Data da última atualização deste Chamado - Campo obrigatório.",
                                   default = date.today()
                                   )
    
    fechamento = models.DateField(verbose_name = u"Data Fechamento",
                                    help_text = u"Data de Fechamento deste Chamado",
                                    null = True,
                                    blank = True)
    def __unicode__(self):
        return u"#%d - %s do Cliente %s." %(self.id, self.tipo, self.cliente)
    
    def save(self):
        self.atualizacao = date.today()
        super(Chamado,self).save()
   
def close_correctly(sender, **kwargs):
    #import pdb;pdb.set_trace()
    flag = False
    obj = kwargs['instance']
    
    if obj.fechamento:
        obj.status = 3
        flag = True
    
    if not flag:
        if obj.status == '3':
            obj.fechamento = date.today()
    post_save.disconnect(close_correctly, sender=Chamado)
    obj.save()
    post_save.connect(close_correctly, sender=Chamado)
    
post_save.connect(close_correctly, sender=Chamado)        
        
class Pergunta(models.Model):

    class Meta:
        verbose_name = u"Pergunta"
        verbose_name_plural = u"Perguntas"
        ordering = ['data']    
    
    chamado = models.ForeignKey(Chamado,
                                verbose_name = u"Chamado",
                                help_text = u"Chamado a que esta requisição se relaciona - Campo obrigatório.")
    
    descricao = models.TextField(max_length = 1000,
                                 verbose_name = "Descrição Requisição",
                                 help_text = "Descrição da requisição - Campo obrigatório.")
    
    seq_number = models.IntegerField(verbose_name = u"Sequencial",
                                     help_text = u"Número sequencial (invisível) desta pergunta no chamado que a contém.",
                                     null = True,
                                     blank = True)
    
    data = models.DateField(default = date.today())
    
    def __unicode__(self):
        strData = self.data.strftime("%d/%m/%Y")
        return u"#%d - %s" %(self.seq_number, strData)

class Resposta(models.Model):

    class Meta:
        verbose_name = u"Resposta"
        verbose_name_plural = u"Respostas"
        ordering = ['data']
    
    chamado = models.ForeignKey(Chamado,
                                verbose_name = u"Chamado",
                                help_text = u"Chamado a que esta resposta se relaciona.")
    
    descricao = models.TextField(max_length = 1000,
                                 verbose_name = u"Descrição Resposta",
                                 help_text = u"Descrição da resposta a requisição.")
    
    seq_number = models.IntegerField(verbose_name = u"Sequencial",
                                     help_text = u"Número sequencial (invisível) desta resposta no chamado que a contém.",
                                     null = True,
                                     blank = True)
    
    data = models.DateField(default = date.today())
    
    def __unicode__(self):
        strData = self.data.strftime("%d/%m/%Y")
        return u"#%d - %s" %(self.seq_number, strData)
